Como utilizar autenticación JWT en flask.
Crear un endpoint login que devuelva un token de acceso
Primero necesitamos instalar los siguientes paquetes:
pip install Flask Flask-JWT-Extended
El código que usaremos será el siguiente:
from flask import Flask, request, jsonify
from flask_jwt_extended import JWTManager, create_access_token, jwt_required
app = Flask(__name__)
# Configuración básica de JWT
app.config['JWT_SECRET_KEY'] = 'super-secret' # Cambia esto por una clave segura en producción
JWTManager(app)
# Simulación de una base de datos de usuarios
users = {
"user123": "password123"
}
# Endpoint de autenticación
@app.route('/login', methods=['POST'])
def login():
data = request.get_json()
username = data.get('username')
password = data.get('password')
if username in users and users[username] == password:
access_token = create_access_token(identity=username)
return jsonify({'access_token': access_token}), 200
else:
return jsonify({'message': 'Credenciales inválidas'}), 401
# Endpoint protegido que requiere token JWT
@app.route('/protected', methods=['GET'])
@jwt_required()
def protected():
current_user = "current_user" # El identity proporcionado por el token JWT
return jsonify({'message': f'¡Hola, {current_user}! Este es un endpoint protegido.'})
if __name__ == '__main__':
app.run(debug=True)
Una vez lanzada la aplicación podemos obtener un token de acceso desde postman:
O tambien usando curl asi:
curl -X POST http://localhost:5000/login -H 'Content-Type: application/json' -d '{"username": "user123", "password": "password123"}'
Python | Flask | JWT Auth